package com.yckj.day06;

/**
 * TODO 值传递与引用传递
 * 引用传递是传地址，在方法执行中，形参和实参内容相同，指向同一块内存地址，方法执行中对引用的操作将会影响到实际对象。
 * （1）基本数据类型传值，对形参的修改不会影响实参；
 * （2）引用类型传引用，形参和实参指向同一个内存地址（同一个对象），所以对参数的修改会影响到实际的对象；
 * （3）String, Integer, Double等immutable(不可改变)的类型特殊处理，可以理解为传值，最后的操作不会修改实参对象。
 *
 * @author shengyuee
 * @version 1.0
 * 2025/7/23 14:51
 */
public class ParamPassDemo {
    public static void main(String[] args) {
        // 双引号创建的字符串会存储在常量池里，下面两句话就创建一个对象，两个引用都指向同一个对象地址
        String s = "hello";
        String s2 = "hello";
        System.out.println("交换前s:"+s);
        change(s); // 这个s变量是实际参数
        System.out.println("交换后s:"+s);

        Person person = new Person();
        person.name = "zhangsan";
        System.out.println("交换前name = " + person.name);
        // 调用交换方法
        change2(person); // person是实际参数
        System.out.println("交换后name = " + person.name);
    }


    public static void change(String s){
        s = "zhangsan";
        System.out.println("change()的s:"+s);
    }
    public static void change2(Person person){// person 是形式参数
        person.name = "tom";
        System.out.println("change2的name = " + person.name);
    }
}
